﻿/*
7-29 删除字符串中的子串 (20 分)
输入2个字符串S1和S2，要求删除字符串S1中出现的所有子串S2，即结果字符串中不能包含S2。

输入格式：
输入在2行中分别给出不超过80个字符长度的、以回车结束的2个非空字符串，对应S1和S2。

输出格式：
在一行中输出删除字符串S1中出现的所有子串S2后的结果字符串。

输入样例：
Tomcat is a male ccatat
cat
*/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>

static void read_line(char a[]) {
	int n = 0;
	int readding = 1;
	char c;
	while (readding && scanf("%c",&c) != EOF) {
		switch (c) {
		case '\r':
		case '\n':
			readding = 0;
			break;
		default:
			a[n++] = c;
		}
	}
	a[n] = 0;
}

static int str_remove_sub(char *a, char *b) {
	char* a0 = 0;
	char* b0 = 0;
	while (*a && *b) {
		if (*a == *b) {
			a0 = a;
			b0 = b;
			while (*a0 && *b0) {
				if (*a0 == *b0) {
					++a0;
					++b0;
				}
				else
					break;
			}
			if (*b0 == NULL) {
				while (*a0) {
					*(a++) = *(a0++);
				}
				*a = 0;
				return 1;
			}
		}
		++a;
	}
	return 0;
}

static void str_remove_str(char *a, char *b) {
	char* rp = NULL;
	char* next = NULL;
	int lenb = strlen(b);
	while (rp = strstr(a, b)) {
		next = rp + lenb;
		for (next = rp + lenb; *next != NULL; ) {
			*rp++ = *next++;
		}
		*rp = NULL;
	}
	//这个代码也正确
	//while (str_remove_sub(a, b)) {
	//	//str_remove_sub(a, b);
	//}
	/*
	** 下面的代码是多余的, 造成了错误, 没有要求删除最后的空格
	int n = strlen(a);
	char* p = a + n - 1;
	while (*p == ' ') {
		*p = 0;
		--p;
	}
	*/
}

int main() {
	freopen("D:/Develop/GitRepos/MOOC/浙江大学/数据结构/201906/zju_C_Basic/data/7.29.txt", "r", stdin);
	char s1[255] = {};
	char s2[255] = {};
	read_line(s1);
	read_line(s2);
	str_remove_str(s1, s2);
	printf(";%s;\n",s1);
	return 0;
}